1. Tipos de datos y expresiones
2.1. Sentencia IF … THEN … ELSE
3.1. Instrucción FOR … TO … NEXT
3.1. Introducción al uso de controles
5.2. Utilización de multiples formularios
5.3. Comunicacion entre formularios
6. Contantes y funciones de Visual Basic
6.4. Funciones de cadenas de caractéres
6.6. Funciones de comprobación
6.8. Las funciones InputBox y MsgBox
Antes de
utilizar un dato en nuestros programas, es necesario declararlo. Este dato
puede ser variable, con lo cual podrá cambiar de valor a lo largo del programa,
o constante, en cuyo caso su valor será el mismo a lo largo de todo el programa
y no podrá modificarse. La forma de declarar las variables es la siguiente:
Dim|
Public| Static nombre_variable As tipo
Dim: Al declarar una variable con
esta palabra estamos diciendo que la variable será local al ámbito en que se
declara. Puede ser dentro de un procedimiento o dentro de un formulario; de
esta forma no será accesible desde los demás procedimientos o formularios.
Public: Las variables declaradas serán
publicas y podrán estar accesibles desde todos los formularios de la
aplicación.
Static: Con esta forma de declarar variables conseguiremos que las variables
locales no se creen y se destruyan al entrar y salir de los procedimientos
donde fueron declaradas sino que se mantenga su valor durante todo el periodo
de ejecución de la aplicación. De esta forma al entrar en algún procedimiento
las variables recuerdan el valor que tenían cuando se salió de él.
Los tipos de
variables que se pueden utilizar en Visual Basic se muestrean en la tabla
siguiente.
TIPOS DE VARIABLES
TIPO |
COMENTARIO |
BOOLEAN |
Sólo admite 2 valores:
TRUE o FALSE |
BYTE |
admite valores enteros
entre 0 y 255 |
INTEGER |
admite valores enteros
entre -32768 y 32767 |
LONG |
valores enteros entre
–2.147.483.648 y 2.147.483.647 |
SINGLE |
admite valores decimales
con precisión simple |
DOUBLE |
admite valores decimales
de doble precisión |
CURRENCY |
válido para valores de
tipo moneda |
STRING |
cadenas de caracteres |
DATE |
fechas, permite operar
con ellas |
Al declarar una
variable lo que estamos haciendo es decir al procesador que reserve una
posición de memoria para guardar un dato. La cantidad de memoria reservada
dependerá del tipo de variable que hayamos indicado. Es importante tener en
cuenta que siempre debemos utilizar el tipo de variable más pequeña posible,
pues de esta forma estaremos consumiendo la menor cantidad de memoria. Por
ejemplo, si queremos crear una variable en la que se guardará la edad de una
persona, bastará con que la variable creada al efecto sea de tipo byte.
Una constante
es aquel dato que tendrá el mismo valor a lo largo de todo el programa. Para
declarar una constante, se procede de la forma siguiente:
Const nombre_constante As tipo = valor
donde nombre_constante es el nombre que queramos dar a la constante, tipo es uno de los tipos de la tabla anterior y valor es el valor que tendrá la constante. El siguiente ejemplo declara una
constante llamada PI a la que se asigna el valor 3,1416:
Const PI as Single = 3,1416
Una matriz es
un conjunto de datos del mismo tipo. Supongamos que necesitamos almacenar 10
números enteros; en lugar de crear 10 variables de tipo entero, podemos crear
una matriz de 10 elementos. Para declarar matrices debemos colocar entre
paréntesis el número de elementos de los que constará a continuación del nombre
de la variable; también habrá que indicar el tipo de elementos que va a
almacenar la matriz. Todo ello se realiza con la siguiente expresión:
Dim nombre_matriz(dimensión) As tipo
De esta forma
tenemos una matriz de 10 elementos identificados del 0 al 9, en la cual se
almacenarán números enteros. Para referirnos al quinto elemento de nuestra
matriz, habría que escribir medidas(4). (Recuerda que el primer elemento es el de índice 0, el segundo el de
índice 1, …). Así por ejemplo, la expresión
almacenaría el número –5 en el
octavo elemento de la matriz.
Aunque no es lo
habitual, podemos obligar a que el primer elemento de una matriz tenga el
índice con valor 1. Esto lo haremos colocando la instrucción option base 1 en la sección declarations de nuestro formulario.
También podemos
indicar los límites inferior y superior de la matriz:
Dim
medidas(5 to 14) as integer es una matriz de 10 elementos cuyos índices van del 5 al 14.
Las matrices
pueden tener más de una dimensión. Las matrices multidimensionales se declaran
de la siguiente forma:
Dim medidas(2, 9) as
integer
sería una matriz bidimensional de
30 elementos, agrupados en tres filas y diez columnas. El primer elemento sería
el de índice (0, 0) y el último (2, 9). Imagina que queremos hacer el típico
juego de los barcos con un tablero de 8 x 8 casillas. Crearíamos una matriz en
la que se almacenaría que casilla contiene un barco y cual no de la siguiente
forma:
Dim tablero_de_barcos(7, 7) as
boolean
Si te has
fijado bien habrás podido observar que hemos separado con el símbolo _ las
palabras “tablero” “de” “barcos”; ello es debido a que el nombre de una
variable no puede estar formado por más de una palabra, por lo que hay que
unirlas de alguna forma para hacer creer al ordenador que se trata de una sola
palabra.
Una expresión
es un conjunto de operandos y operadores que una vez evaluados devuelven un
resultado. En Visual Basic hay cuatro tipos de operadores: aritméticos,
relacionales, lógicos y de texto. Los operadores relacionales son aquellos que
devuelven valores de tipo Bolean, es decir, su resultado será Verdadero o
Falso.
TIPOS DE OPERADORES |
|||
Aritméticos |
Relacionales |
Lógicos |
De texto |
Potenciación ^ |
Igual que
= |
Not |
& |
Negación - |
Distinto a
<> |
And |
|
Suma y resta +, - |
Menor que
< |
Or |
|
Multiplicación y división *, / |
Menor o igual que <= |
|
|
División entera \ |
Mayor que
> |
|
|
Resto de la división Mod |
Mayor o igual que
>= |
|
|
Los operadores
aritméticos y los relacionales no necesitan mayor aclaración. La función de los
operadores lógicos y de texto es la siguiente:
§ Not (expresión) si el resultado
de expresión es FALSO lo convierte en VERDADERO, y viceversa.
§ (expresión_1) And (expresión_2) devuelve
VERDADERO si el resultado de las dos expresiones es VERDADERO, y FALSO
en caso contrario.
§ (expresión_1) Or (expresión_2) devuelve
VERDADERO si el resultado de alguna de las dos expresiones es VERDADERO,
y FALSO en caso contrario.
Unos ejemplos
ayudarán a comprender mejor algunos de los distintos operadores:
Expresión |
Resultado |
|
Expresión |
Resultado |
4 ^ 3 |
64 |
2 + 7 <> 5 |
VERDADERO |
|
7 / 3 |
2,33333333 |
2 + 7 > 9 |
FALSO |
|
7 \ 3 |
2 |
2 + 7 >= 9 |
VERDADERO |
|
7 mod 3 |
1 |
Not (3 < 5) |
FALSO |
|
|
|
(2 + 3 < 8) And (3
< 5) |
VERDADERO |
|
“buen” & “día” |
“buendía” |
(2 + 3 < 8) Or (3
< 5) |
VERDADERO |
Ejercicios:
1) Indica como se declararía una variable que almacenase los siguientes
datos:
a) El año de nacimiento de una persona.
b) El resultado de una ecuación de un ejercicio de física.
c) Saber si una persona es mayor de edad.
d) La ciudad de residencia de una persona.
e) El número de hijos de una persona.
2) Escribe la expresión que declara una constante de valor “ZAMORA”.
3) Queremos crear una matriz en la que se van a almacenar las medidas
(ancho, alto y largo) de un automóvil, en milímetros y sin decimales. ¿Cómo se
declararía la matriz que contuviese estos datos?
4) Indica el resultado de las siguientes expresiones:
a) (2 + 5) ^ 2
b) Not (( 19 Mod 5) < 7)
c) “Hola“ & “ “ & “amigos”
d) 18 > 11 And (( 5 \ 3 ) <> 1)
e) 18 > 11 Or (( 5 \ 3 ) <> 1)
Hay ocasiones en las que
un programa debe realizar distintas acciones dependiendo del valor de una
condición. En estos casos, disponemos de 2 tipos de sentencias para realizar
selecciones dependiendo del valor de una expresión o de una variable:
La estructura general de
esta sentencia es la siguiente:
If condición then
bloque de sentencias a realizar si la
condición es cierta
Else
bloque de sentencias a realizar si la
condición es falsa
End If
Supongamos
que queremos crear un programa que nos diga si somos mayores o menores de edad.
El código de dicho programa sería el siguiente:
If edad <
18 Then
print “menor de edad”
Else
print “mayor de edad”
End If
Se
pueden colocar todas las sentencias de código que queramos en cada uno de los
bloques de sentencias, siempre que cada sentencia vaya en una línea distinta.
Si los bloques de sentencias están formados por una sola instrucción podemos
utilizar la versión reducida que ocupa una sola línea:
If condición then sentencia else sentencia
Ejemplo: If IsNumeric(número) then a = número else
print “Error”
En
el ejemplo anterior, si la variable número contiene
un valor numérico, este es almacenado en la variable a; en caso contrario el programa
imprimirá en pantalla el mensaje “Error”.
También podemos anidar varias sentencias If then
Else cuando una de las 2 opciones iniciales contiene a su vez 2 bifurcaciones
dependiendo del estado de otra condición:
If edad <
18 Then
print “menor de edad”
Else
If edad
< 65 Then
print “adulto”
Else
print “tercera edad”
End If
End
If
Este último ejemplo podría
haberse escrito de otra forma utilizando la cláusula ElseIf:
If edad < 18 Then
print “menor de edad”
ElseIf edad < 65 Then
print
“adulto”
Else
print
“tercera edad”
End If
Podemos introducir tantas
líneas ElseIf como queramos siempre
antes del último Else, si es que lo
necesitamos.
Para
múltiples decisiones, normalmente más de 3, en las que dependiendo del valor de
una variable queremos que se realice una acción distinta, no conviene utilizar
la estructura If Then, sino que el código queda
más claro y resulta más fácil de modificar utilizando la sentencia Select
Esta
sentencia permite realizar operaciones diferentes dependiendo del valor de una
variable. Su estructura general es la siguiente:
Select Case dato
Case
valor1
bloque de sentencias
case valor2
bloque de sentencias
Case valor3
bloque de sentencias
Case Else
bloque de sentencias, se ejecutan si no se cumple ninguno de
los valores anteriores
End
Select
En
esta construcción, dependiendo del valor de la variable dato se ejecutará un
bloque de sentencias diferente. Los valores que podemos colocar en lugar de
valor1, valor2, valor3 no sólo se limitan a valores constantes como números y
cadenas de texto, sino que podemos comparar con un número como podemos ver en
el siguiente ejemplo, en el que tenemos una variable de tipo single llamada NotaFinal en la que está guardada la nota de un alumno:
Select
Case NotaFinal
Case Is < 5
print “Suspenso”
Case Is < 6
print “Suficiente”
Case Is < 7
print “Bien”
Case Is < 9
print “Notable”
Case Else
print “Sobresaliente”
End Select
Como
podemos observar si utilizamos los operadores lógicos como >, <, =,
<=, >= debemos anteponer el operador Is. Si lo que hacemos es
comparar con un intervalo de valores colocaremos el operador to entre los limites del
intervalo.
Case 5 to 5.99
print “suficiente”
También
podemos realizar comparaciones con un conjunto de valores separados por comas:
Case 1, 3, 5
print “el numero es
impar”
Ejercicios:
1) Escribe un programa que imprima la palabra GRANDE si un número es mayor o igual que 1000 y PEQUEÑO en caso contrario.
2) Un programa debe indicar si un número es positivo, negativo o cero.
¿Cuál será su código?
3) Indica como sería el código de un programa en el que a partir del valor
numérico del mes nos dijese en que estación del año nos encontramos.
4) Indica como se escribiría el código en el que a partir del valor
numérico del mes nos dijese el nombre del mes en que nos encontramos.
Sirve para ejecutar un bloque de sentencias un número conocido de veces. La sintaxis de esta instrucción es
For contador = inicio To fin [Step incremento]
bloque de sentencias
Next [contador]
Contador es la variable numérica que se incrementa cada vez que se
ejecuta el bucle. Este se realizará un número determinado de veces que vendrá
determinado por los valores de inicio y de fin. Los argumentos entre corchetes
son opcionales. Si no se indica incremento, éste se presupone que vale 1. En
cualquier momento podemos abandonar la ejecución en mitad del bucle si dentro
del bloque de sentencias colocamos la instrucción Exit For.
Unos cuantos ejemplos ayudarán a comprender mejor esta instrucción:
For i = 1 to 5 Print i Next i |
Imprime
en pantalla los números 1 a 5 |
For i = 0 to 10 step 2 Print i Next i |
Imprime
en pantalla los números 0, 2, 4, 6, 8 y 10 |
For i = 10 to 2 step -2 Print i Next i |
Imprime
en pantalla los números 10, 8, 6, 4 y 2 |
Hay que tener cuidado con
no crear un bucle que no se acabe nunca. Por el ejemplo, el siguiente bucle For no se terminaría nunca,
pues si comenzamos en el número 10 y aumentamos una unidad cada vez que el
bucle se repita, nunca llegaremos al número 5.
For i = 10 to 5
Print i
Next i
En las estructuras anteriores, conocíamos de antemano
el número de veces que iba a repetirse el bucle; en algunas ocasiones no
podemos conocer cuantas veces debemos repetir una determinada instrucción (por
ejemplo al pedir una clave secreta; habrá que repetir la petición de la misma
hasta que la clave introducida sea correcta). En estos casos utilizaremos la
instrucción Do … Loop. Se ejecutará un bloque de código mientras o hasta que la
condición evaluada sea verdadera. Dependerá de la forma en la que escribamos la
instrucción. Por lo tanto la sintaxis de esta estructura puede adoptar alguna
de las siguientes formas:
Estructura |
Explicación |
Do While condición bloque
de sentencias Loop |
El bloque de sentencias
se ejecuta mientras se cumpla la condición. Puede ocurrir que dicho bloque no
se ejecute ninguna vez. |
Do bloque
de sentencias Loop While condición |
El bloque de sentencias
se ejecuta mientras se cumpla la condición. Dicho bloque se ejecutará al
menos una vez. |
Do Until condición bloque
de sentencias Loop |
El bloque de sentencias
se ejecuta hasta que se cumpla la condición. Puede ocurrir que dicho bloque
no se ejecute ninguna vez. |
Do bloque
de sentencias Loop
Until condición |
El bloque de sentencias se
ejecuta hasta que se cumpla la condición. Dicho bloque se ejecutará al menos
una vez. |
En cualquier momento podemos abandonar la ejecución
en mitad del bucle si dentro del bloque de sentencias colocamos la instrucción Exit Do.
Veamos algunos ejemplos del uso de estas
sentencias:
i = 2 Do While i < 8 Print i i = 2 + i Loop |
Imprime
en pantalla los números 2, 4 y 6 |
i = 3 Do Print i i = 2 * i Loop While i <= 12 |
Imprime
en pantalla los números 3, 6 y 12 |
i = 2 Do Until i >= 16 Print i i = i ^ 2 Loop |
Imprime
en pantalla los números 2 y 4 |
i = 10 Do Print i i = i - 1 Loop Until i < 7 |
Imprime
en pantalla los números 10, 9, 8 y 7 |
Hay que tener cuidado con no crear un bucle
infinito, es decir, un bucle que no termine nunca, como por ejemplo los siguientes:
i = 2
Do While i > 0
Print i
i = i + 2
Loop
Como i siempre es mayor que 0, el
bucle no terminará nunca y el programa imprimirá en pantalla todos los números
pares, hasta el infinito.
También puede
ocurrir lo contrario, es decir, que creemos un bucle que no se ejecute nunca:
i = 2
Do While i < 0
Print i
i = i + 2
Loop
Como i no es
menor que 0, el bucle nunca se ejecutará.
Ejercicios:
1) Escribe el código de un programa que imprima en pantalla los números
del 1 al 10 junto a su cuadrado.
2) Un programa debe imprimir todos los números impares en orden
descendente entre el 100 y el 10. ¿Cuál será su código?
3) Queremos calcular la suma de los números comprendidos entre 11 y 20, a.
i. Escribe el código correspondiente.
4) Escribe el código que imprime todos los números junto a su cubo,
comenzando por el 1, hasta que ese cubo sea superior a 5.000.
Los controles son objetos que disponen de sus
propias propiedades y métodos, y cuya utilidad es la de facilitarnos el
desarrollo de nuestras aplicaciones. Lo único que tendremos que hacer es
modificar sus propiedades (tamaño, color, etc..) para incorporarlos en nuestros
programas y asociarles el código necesario para que se comporten como esperamos
al ejecutar la aplicación.
Por ejemplo, el botón Aceptar que encontramos en
multitud de programas es un control.
Antes de empezar a conocer
los controles básicos veamos cuales son sus características generales:
·
Propiedades: Todos los controles
disponen de una serie de propiedades las cuales podemos cambiar al incluirlos
en nuestras aplicaciones. Ejemplos de propiedades son el color, el tipo de
letra, el nombre, el texto, etc...
·
Métodos: Son procedimientos
asociados a los controles, es decir, rutinas ya establecidas que podemos
invocar desde nuestras aplicaciones para que se realice alguna operación sobre
el control. Por ejemplo el control ListView (la lista de archivos que aparece
en el explorador de Windows) dispone del método Order que te ordena los
datos aparecidos en la lista.
· Eventos: Son acciones que pueden ser motivadas por el propio usuario o por el mismo sistema operativo. Ejemplos pueden ser el movimiento del ratón o hacer click sobre un botón. No necesitamos detectar cuando se ha producido un evento determinado, Windows lo detecta automáticamente. Los eventos ya están definidos, son bastantes y cada control cuenta con los suyos propios, aunque son muy parecidos. Lo único que tendremos que hacer es asociar el código necesario al evento que necesitemos tratar.
La ventana donde aparecen los controles que
Visual Basic carga por defecto nada más arrancar la aplicación aparece en la
figura adjunta. Moviendo el ratón por encima de cualquier control aparecerá un
‘ToolTipText’ indicándonos el control de que se trata.
Cuando vayamos a utilizar un control en
nuestro formulario, tendremos que darle un nombre. Aunque podemos poner el
nombre que deseemos a un control, el nombre que le demos deberá estar
relacionado con la función que realizará el control; además, es conveniente que
indique el tipo de control de que se trata. Existe una convención ampliamente aceptada que es la siguiente: se
utilizan siempre tres letras minúsculas que indican el tipo de control,
seguidas por otras letras (la primera mayúscula, a modo de separación)
libremente escogidas por el usuario, que tienen que hacer referencia al uso que
se va a dar a ese control. La tabla siguiente muestra las abreviaturas de los
controles más usuales, junto con la nomenclatura inglesa de la que derivan:
cmb ComboBox
chk CheckBox
cmd CommandButton
frm Form
fra Frame
img Image
lbl Label
lin Line
mnu Menu
opt OptionButton
pic PictureBox
shp Shape
txt TextBox
tmr Timer
Así por ejemplo, el botón Aceptar que comentamos antes podría
tener en el formulario el nombre
cmdAceptar.
Hay
una serie de propiedades que son comunes a la mayoría de los controles. Son las
siguientes:
Name: es el nombre con el que se conocerá el control cuando lo utilicemos en
el código. En un mismo formulario no puede haber 2 controles con el mismo
nombre. Conviene poner un nombre que represente la función que tiene el control
en la aplicación para que el código quede más claro.
Alignment: alineación que tendrá el texto dentro del control: izquierda, centro o
derecha.
Appearance: aspecto del control: 3D o plano.
BackColor: color del fondo del control.
BorderStyle: es el tipo de contorno para el control, el estilo del borde.
Caption: Es el texto que contendrá
el control. Esta propiedad no existe en el control TextBox.
Enabled: establece si un control está habilitado para su modificación por parte
del usuario o no. Si un control no está habilitado, es decir, tiene la
propiedad Enabled establecida en False, su color aparece un poco difuminado para indicar que no se puede
utilizar ese control en ese momento. En la figura anterior podemos ver un menú
con una opción habilitada y dos deshabilitadas.
Font: tipo y tamaño de letra que usa el control.
ForeColor color de la
letra del control.
Heigth: altura del control.
Left: distancia entre el borde izquierdo de un objeto y el borde izquierdo
de su contenedor.
TabIndex: es el orden que ocupa el control cuando se va pasando de uno a otro
mediante la tecla tabulador.
ToolTipText: Aquí indicaremos el texto que se mostrará cuando el ratón se sitúe
sobre el control. Este texto puede servir de aclaración o ayuda sobre la
función de dicho control. En la figura adjunta podemos ver el ToolTipText que aparece al dejar
el puntero del ratón sobre el botón Abrir.
Top: distancia entre el borde superior de un objeto y el borde superior de
su contenedor.
Visible: Devuelve o establece un valor que determina si el control es visible.
Por ejemplo para ocultar un control podemos establecer el valor de esta
propiedad a False.
Width: anchura del control.
TextBox
Mediante este control podremos
realizar tanto la entrada como la salida de datos en nuestras aplicaciones. Las
propiedades de las que dispone el control (además de las generales de todos los
controles) son las siguientes:
CausesValidation: Esta propiedad sirve
para indicar si queremos que al abandonar el control se genere un evento Validate. Desde el método
correspondiente a dicho evento se deberá comprobar el valor introducido en el
TextBox, permitiéndose así o no la salida. Esta propiedad
podrá tener el valor True o False.
MaxLength: número de caracteres máximo que puede contener el texto introducido en
el TextBox. Cuando estamos introduciendo texto y llegamos al máximo nos alerta
con un pitido.
MultiLine: permite que el control tenga varias líneas de edición. Esta propiedad
podrá tener el valor True o False.
Locked: Si está con
valor True bloquea el control, es decir, el
usuario no puede introducir ni modificar el texto que contenga. Nos puede
servir para utilizar el control como salida de datos sin que el usuario pueda
modificarlos por error.
Text: Es la
propiedad equivalente a Caption en los demás controles. Aquí indicamos el texto
que aparecerá en el control. Podemos asignarle cualquier texto en el momento de
diseñar el programa o durante la ejecución del mismo. También podemos leer el
texto que haya introducido el usuario para tratarlo durante la ejecución del
programa.
Label
Su utilidad queda restringida a la visualización de
datos en el programa, no permitiendo la introducción de datos por parte del
usuario. Este control sirve para mostrar mensajes en nuestro formulario que
orienten al usuario sobre la utilidad de los demás controles que tengamos en la
aplicación o para indicarnos acciones que podemos realizar. Sus propiedades son
las comunes a los demás controles, aunque podemos mencionar aquí la propiedad
AutoSize: Hace que el tamaño de la
etiqueta se ajuste automáticamente a la longitud del texto que contiene.
Para
este control no se suelen utilizar los eventos ya que su contenido suele
cambiar poco a lo largo de la ejecución de la aplicación. A este control no se
le puede dar el enfoque (al pulsar la tecla tabulador nunca nos podremos
colocar sobre este control).
Antes de seguir
comentando otros controles, podemos ver en la figura siguiente algunos de
ellos.
CommandButton
Este control es el típico botón que aparece en
todas las aplicaciones y que al hacer click sobre él nos permite realizar
alguna operación concreta. Según el código que le asociemos podremos realizar
las operaciones que queramos. El evento por excelencia de este control es
click. Sus propiedades son:
Cancel: si esta propiedad tiene el valor True quiere decir que se trata del botón de
cancelación. Ello implica que al pulsar la tecla Escape se ejecutará el código
asociado al evento click de dicho botón, independientemente de donde
se encuentre el foco en ese momento.
Default: si esta propiedad tiene el valor True quiere decir que se trata del botón por defecto.
Ello implica que al pulsar la tecla Intro se ejecutará el código asociado al
evento click de dicho botón, independientemente de donde
se encuentre el foco en ese momento.
Picture: Podemos
escoger una imagen que aparecerá sobre el botón.
DisablePicture: es la imagen que se
mostrará en el botón cuando éste se encuentre deshabilitado, es decir, cuando
su propiedad Enabled sea False.
DownPicture: imagen que mostrará el botón cuando esté
pulsado.
NOTA: Para
poder utilizar las tres propiedades anteriores es necesario que la propiedad
Style esté en el valor Graphical; en caso contrario el botón no podrá contener dibujos.
Style: Esta propiedad
puede tomar dos valores: Standard o Graphical.
Value: dando a esta
propiedad desde el código del programa el valor True, se generará el evento Click. Por lo tanto se trata de una forma de activar el botón desde el
código, igual que si se hubiese pulsado el ratón o el teclado.
CheckBox
El
control CheckBox es una casilla de verificación en la que únicamente cabe la
posibilidad de que se encuentre marcada o desmarcada. Su principal propiedad
es:
Value: el valor será Checked cuando la casilla de verificación se encuentre marcada y Unchecked cuando esté desmarcada.
OptionButton
Este
control nos permite elegir una opción entre varias de las que se nos plantean.
Cada opción será un control OptionButton diferente. Observa la figura del
ejemplo de más abajo. De todas las opciones que se nos ofrece, sólo podremos
activar una. Si activamos cualquier otra opción, se desactivará automáticamente
la última que teníamos activada.
El
marco que está alrededor de los 6 controles OptionButton se trata del control Frame
,
es opcional, aunque es conveniente colocarlo siempre que hagamos uso de las
opciones. No sólo por motivos de presentación sino porque de esta manera
podremos establecer grupos de controles OptionButton independientes en los que
en cada grupo sólo pueda haber una opción activada a la vez. También, al mover
el marco se moverán los controles incluidos en él facilitándonos las modificaciones.
Para
que los controles OptionButton
queden englobados
dentro de un control Frame, primero tendremos que colocar el
control Frame en el formulario con el tamaño adecuado y
después ir colocando los controles Optionbutton
dentro del Frame. Del control Frame la única
propiedad que nos interesará es Caption, que es el texto que aparecerá en el
encabezado.
La propiedad más importante del control OptionButton es
Value: Es el valor que tendrá el
control: True si se encuentra activado y
False si no lo está.
No se suele asociar código
a los eventos de este tipo de controles, sino únicamente conocer el valor que
tienen: True o False.
EJEMPLO
Para practicar
vamos a realizar una aplicación que consistirá en realizar con 2 números que
introduzcamos, una operación que seleccionemos y mostrar el resultado. El
formulario donde estarán todos los controles es el que aparece en la figura
adjunta.
La
propiedad Caption de
cada uno de los controles es la que se muestra en el formulario.
Se
ha modificado la propiedad Name
de cada control para que al utilizarlos desde el código sepamos cual es el
control con el que trabajamos:
·
Los controles TextBox tienen los nombres: Num1, Num2
y Resul.
·
Los controles Optionbutton tienen cada uno de ellos
el mismo nombre que su caption
·
Los controles CommandButton tienen los nombres: Calcular,
Limpiar y Salir.
·
A los controles Label y al Frame no hace falta cambiarles el nombre.
Lo
que habrá que hacer ahora es asociar código a cada uno de los botones que es de
donde se van a realizar las operaciones:
· Para el botón Calcular,
que es el que nos mostrará el resultado según la operación seleccionada, hemos
utilizado la instrucción If
Then Else.
Private Sub Calcular_Click()
Dim r, a, b As Double
a = Num1.Text
b = Num2.Text
r = 0
If suma.Value = True Then
r = a + b
ElseIf resta.Value
= True Then
r = a – b
ElseIf
producto.Value = True Then
r = a * b
ElseIf division.Value
= True Then
r = a / b
ElseIf
potencia.Value = True Then
r = a ^ b
End If
Resul.Text = r
End Sub
·
El botón Limpiar Datos nos va a servir para
borrar los datos introducidos por el usuario y el resultado preparando. El
código que tendremos que introducir es el siguiente:
Private Sub Limpiar_Click()
Num1.Text = “”
Num2.Text = “”
Resul.Text = “”
End Sub
·
El botón Salir únicamente contendrá la sentencia End.
Private Sub Salir_Click()
End
End Sub
Nota: el comando End hace que un programa finalice.
Image
Este control lo utilizaremos
cuando necesitemos visualizar una imagen en nuestro programa. Para ello haremos
uso de las dos propiedades siguientes:
Picture: determina la
imagen que se debe mostrar en el control. Esta propiedad contendrá la dirección
del archivo donde está almacenada la imagen. Si la imagen ha de cargarse en
tiempo de ejecución, habrá que hacer uso de la función LoadPicture de la siguiente forma:
Image1.Picture
= LoadPicture("c:\mis
documentos\dibujo.bmp")
Stretch: si esta propiedad está establecida a False, el control se
redimensionará al cargar la imagen, adaptándose al tamaño de esta. Si el valor
es True, será la imagen la que se adapte al tamaño del control.
PictureBox
El control cuadro de imagen es como un control Image ampliado; además de poder visualizar imágenes nos permite dibujar puntos, líneas, rectángulos, círculos, etc... Dentro de él pueden colocarse incluso otro tipo de controles. Las propiedades más importantes son:
Picture: determina la
imagen que se debe mostrar en el control.
AutoSize: automatiza el tamaño del control a la imagen, es decir, aquel se
ajustará al tamaño de la imagen que ha de contener.
FillColor: Color que se utilizará
como relleno cuando se dibujen formas en el formulario utilizando los métodos
Line o Circle.
FillStyle: Tipo de relleno que se
dará a las formas que se dibujen en el formulario utilizando los métodos Line o
Circle.
Existen una serie de
métodos que nos van a permitir realizar determinados dibujos dentro de un
PictureBox. Son los siguientes:
Pset (x, y), color Dibuja un punto en la
posición dada por las coordenadas X e Y. El color vendrá dado por el valor de
la variable color.
Line (x, y) - (z, w), color Dibuja una línea entre los puntos (X, Y)
y (Z, W) con el color especificado.
Line (x, y) - (z, w), color, B Dibuja un rectángulo cuyas esquinas superior
izquierda e inferior derecha serán respectivamente los puntos de coordenadas
(X, Y) y (Z, W). El color del borde está dado por el valor de color.
Circle (x, y), radio, color Dibuja un círculo con centro el punto
(X, Y).
Cls Borra el contenido del
PictureBox.
Todos
los métodos anteriores funcionan igualmente sobre el formulario. Si queremos
que los dibujos se realicen sobre un PictureBox tendremos que anteponer el
nombre de este antes de todos los métodos, separados por un punto.
En
aquellos en los que sea posible, el tipo de relleno y el color del mismo
estarán determinados por los atributos establecidos en FillStyle y en FillColor. El estilo de las líneas
(continuas, discontinuas) y su grosor se establecen mediante las propiedades DrawWidth y DrawStyle.
El
siguiente ejemplo hace uso de uno de estos métodos.
Private Sub Form_MouseMove(Button As
Integer, Shift As Integer, _
X
As Single, Y As Single)
If Button
= 1 Then PSet (X, Y), vbBlue
End Sub
El ejemplo
anterior irá pintando de color azul aquellos puntos por los que vaya pasando el
ratón, siempre que tengamos pulsado el botón primario del mismo. Esto es así
porque la condición If hace que el método Pset sólo se ejecute si la variable
Button (variable que determina que botón del ratón está pulsado en cada
momento) vale 1. El valor de Button será 0 si no se encuentra pulsado ningún
botón, 1 si el botón pulsado es el primario y 2 si es el secundario.
Line y Shape
Estos
dos controles son de los más simples que podemos encontrar en Visual Basic. Se
utilizan para dibujar líneas el primero de ellos y para dibujar distintas figuras
o polígonos el segundo. Son controles estáticos, pues no pueden responder a
ningún tipo de evento. Las propiedades características a ambos controles son:
BorderColor: color de la línea o color del borde que delimita la figura.
BorderStyle: estilo de la línea o del borde: continuo, discontinuo, etc...
BorderWidth: anchura de la línea o del borde de la
figura.
Además
de estas, hay otras propiedades características de cada control. Las propias
del control Line son:
X1, X2, Y1, Y2: Estas cuatro coordenadas determinan los puntos origen y final de la
línea. Recordar que en informática el origen de coordenadas se corresponde con
la esquina superior izquierda.
El control Shape tiene estas propiedades características:
FillColor: color de relleno de la figura.
FillStyle: el valor de esta propiedad determinará el
tipo de relleno que tendrá la figura. Este puede ser sólido, transparente, con
líneas horizontales, verticales, ...
Conviene recordar ahora que habíamos dicho que existían dos propiedades
comunes a todos los controles que eran BackColor y BackStyle, y que tenían una
función semejante a la que estamos describiendo para FillColor y FillStyle. Si
en un Shape tenemos activadas las dos opciones, el color que prevalecerá como
color de relleno será el que esté indicado en la propiedad FillColor.
Shape: propiedad cuyo valor sirve para especificar
que figura se dibujará. Los valores posibles son 0 (rectángulo), 1 (cuadrado),
2 (óvalo), 3 (círculo), 4 (rectángulo redondeado) y 5 (cuadrado redondeado).
ComboBox
Este control es una lista desplegable donde el usuario puede seleccionar una de las posibles opciones que aparecen cuando desplegamos la persiana.
El control ComboBox posee dos listas, una visible, que es la que se despliega, y otra no visible. La información de la lista visible se guarda en la propiedad List. El primer elemento de la lista está almacenado en la propiedad List(0), el segundo elemento en List(1) y así sucesivamente. El primer elemento de la lista tiene el subíndice 0. La propiedad ListCount contiene el número de elementos que existen en la lista desplegable. El último elemento de la lista tiene el subíndice ListCount – 1.
Como dijimos este control posee una lista adicional no visible. Los elementos de esta lista no visible se almacenan en la propiedad ItemData; ItemData(0) para el primero, ItemData(1) el segundo, etc. Esta propiedad solo admite números enteros.
Cuando hacemos clic sobre una de las opciones de la lista, se muestra en la ventana de control. La propiedad Text almacena el contenido de esa ventana; es decir, Text guarda la misma información que la propiedad List(n), donde n es el subíndice del elemento seleccionado. La propiedad ListIndex contiene el subíndice del elemento seleccionado, o sea n. Cuando la ventana superior de la persiana no contiene nada, la propiedad Text está vacia y ListIndex alamacena –1.
Si necesitamos que además la aplicación haga algo al seleccionar una opción de la lista, podemos programar el evento Click del control.
El método AddItem inserta un nuevo elemento en la lista. La propiedad NewIndex contiene el índice del último elemento que hemos insertado.
Como propiedades características de este elemento de control podemos destacar:
List:
Podemos añadir los
Items de la lista no en el momento de ejecución del programa, sino en el
momento de su creación. Para ello accedemos a esta propiedad y vamos
escribiendo los distintos elementos que queremos que salgan al desplegar la
lista. Una vez escrito el primero de ellos, para seguir añadiendo elementos
debemos pulsar Ctrl+Intro.
Sorted: permite especificar si los elementos de la lista aparecerán ordenados
alfabéticamente.
Style:
existen tres
posibles estilos para el ComboBox:
0
(Dropdown Combo) Este estilo hace que
el texto del ComboBox pueda seleccionarse de la lista o bien escribirse
directamente sobre el mismo.
1
(Simple Combo) No aparece la
flecha que nos permite desplegar la lista, por lo que no podremos escoger los
elementos de la misma. Simplemente se nos permitirá escribir directamente sobre
el control como si se tratase de un control TextBox.
2
(Dropdown List) No es posible
escribir directamente sobre el control; únicamente pueden escogerse los
elementos de su lista.
Timer
Este control funciona de forma distinta a los demás
pues no aparece en el formulario durante la ejecución del programa; sólo lo
veremos en el proceso de diseño. Se utilizará cuando queramos que una o varias
sentencias se ejecuten de forma repetida a lo largo del desarrollo del
programa. La propiedad característica de este control es Interval. Esta contendrá el valor, en
milisegundos, que especifica cada cuanto tiempo deben ejecutarse las sentencias
incluidas en el código asociado al control. Para detener la ejecución del
código asociado al control bastará con establecer el valor de la propiedad
Interval a 0. Por ejemplo, si queremos que un programa emita un pitido cada
segundo deberemos escribir el siguiente código
Private Sub tmrTemporizador_Timer()
Beep
End Sub
además de tener la
propiedad Interval del temporizador establecida en 1000.
HScrollBar y VscrollBar
Son las típicas barras de desplazamiento
horizontal y vertical que aparecen en multitud de programas. Las propiedades a
destacar de estas barras son:
Value: valor que
indica la posición en la que se encuentra el indicador de desplazamiento de la
barra. Este valor estará comprendido entre los valores Max y Min.
Max: valor máximo que podrá tomar la propiedad Value.
Min: valor mínimo que podrá tomar la propiedad Value.
SmallChange: esta propiedad indica
cuantas unidades cambiará Value al hacer click en una de las flechas de
los extremos de la barra de desplazamiento.
LargeChange: número de unidades que
cambiará el valor de Value al hacer click dentro de la barra de
desplazamiento.
Los eventos son acciones que se
pueden realizar en cualquier control: click, doble click, movimiento del
ratón,… A estos eventos se les puede asociar código para que se ejecute al
producir el evento. Los eventos más habituales son:
MouseMove: al mover el ratón por encima del control.
MouseDown: al pulsar cualquier botón del ratón.
MouseUp: al soltar cualquier botón del ratón.
Los tres
eventos anteriores poseen los cuatro parámetros siguientes: Button, Shift, X e
Y. Cada uno de ellos toma los siguientes valores:
Button: toma el valor 0 si no se aprieta ningún
botón del ratón, el valor 1 si el botón que se aprieta es el primario, el valor
2 si el botón pulsado es el secundario y 4 si se pulsa el botón central del
ratón.
Shift: nos indica si al pulsar el ratón teníamos
pulsada alguna de las teclas Shift, Ctrl,
Alt o AltGr.
Sus posibles valores son los siguientes:
0 si no está pulsada ninguna de estas teclas,
1 está pulsada la tecla Shift,
2 está pulsada la tecla Ctrl,
4
pulsada
la tecla Alt,
6 pulsada la tecla AltGr.
X e Y: guardan el valor de las coordenadas X e Y
en las que se encontraba el puntero del ratón en el momento de producirse el
evento.
Veamos un ejemplo del uso de
uno de estos controles:
Private Sub Form_MouseDown(Button As Integer, Shift
As Integer, X As Single, Y As Single)
If Button =
1 Then
Print "Has pulsado el
botón primario en la posición " & X & ", " & Y
ElseIf
Button = 2 Then
Print
"Has pulsado el botón secundario en la posición " & X &
", "& Y
Else
Print
"Has pulsado el botón central en la posición " & X & ",
" & Y
End
If
End Sub
Si pulsamos uno
de los botones del ratón, el programa imprimirá en pantalla cual de ellos era y
la posición en la que lo hemos hecho.
Change: al cambiar el contenido del control, por ejemplo al escribir algo en
un TextBox.
Click: al hacer click con el botón izquierdo del ratón
sobre el control.
DblClick: al hacer doble click con el con el botón izquierdo
del ratón sobre el control.
KeyDown: al presionar una tecla en el teclado. Este evento
tiene dos parámetros: KeyCode, que se corresponde
con un código numérico que dependerá de la tecla pulsada, y Shift , que valdrá 1 o 0 dependiendo respectivamente de
si se encuentra pulsada o no la tecla Shift.
Private
Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Print KeyCode, Shift
End Sub
KeyUp: semejante al anterior, salvo que este evento se
genera al soltar la tecla que teníamos presionada.
KeyPress: al pulsar una tecla del teclado y mantenerla
pulsada. Es un evento parecido a KeyDown, aunque dispone de un solo
parámetro, KeyAscii. Este parámetro es
particular de cada carácter, y es un número entre 0 y 255 que nos informa del
carácter pulsado. (Aunque parezca igual que el parámetro KeyCode del evento KeyDown, no son lo mismo. KeyAscii diferencia entre pulsar “a” o pulsar “A”, mientras
que KeyCode no). El siguiente ejemplo imprime el carácter
pulsado.
Private
Sub Form_KeyPress(KeyAscii As Integer)
Print Chr(KeyAscii)
End Sub
Gotfocus: este evento se activa cuando el control recibe el
enfoque, es decir, cuando se activa el control en tiempo de ejecución para
introducir datos en él o realizar alguna operación.
Lostfocus: Es el contrario del anterior evento, se activa
cuando el control pierde el enfoque, es decir, se pasa a otro control para
seguir introduciendo datos.
Los formularios son tratados como controles con sus
propiedades, eventos y métodos. Aunque digamos que se trata de un control
especial que utilizamos para contener los controles más usuales con los que
construiremos nuestras aplicaciones: TextBox, Label, CommandButton, etc... Vamos a ver las
propiedades y eventos más importantes de los formularios, como trabajar con
múltiples formularios y como se establece la comunicación entre ellos.
Mientras que los formularios con los atributos por
defecto son ventanas de las que se utilizan en todas las aplicaciones Windows,
cuando se les inhabilita los botones de minimizar y maximizar junto con la
característica de ser redimensionables tenemos una ventana a la que se denomina
cuadro de diálogo. Estos se caracterizan por tener unas dimensiones fijas (p.
e., no se puede redimensionar el cuadro de diálogo “Imprimir” que se muestra al
ejecutar el comando del mismo nombre en cualquier programa Windows) y un
atributo adicional, el de ser modales o no modales. Un cuadro de diálogo es
modal cuando se muestra sobre todas las demás ventanas de la aplicación y no se
puede realizar ninguna otra operación en tanto no se cierre dicho cuadro de
diálogo. Será no modal en caso contrario.
Las
propiedades más comunes de los formularios y que son similares al resto de los
controles son:
Name: Nombre del formulario,
necesario para llamar al formulario desde el código.
Caption: Texto que aparece en el
título del formulario
Backcolor: Color de fondo del
formulario.
Forecolor: Color del texto del
formulario.
FillColor: Color que se utilizará
como relleno cuando se dibujen formas en el formulario utilizando los métodos
Line o Circle que vimos anteriormente.
FillStyle: Tipo de relleno que se
dará a las formas que se dibujen en el formulario utilizando los métodos Line o
Circle.
Otras
propiedades que son propias de los formularios son:
WindowState: Nos permite indicar el
modo en el que aparecerá el formulario cuando sea llamado. Tiene tres posibles
valores:
0 – Normal 1 -
Minimizado. 2 -
Maximizado.
MinButton y MaxButton: Son dos propiedades que
admiten únicamente los valores True o False. Permiten que queden habilitados los botones
minimizar y maximizar, respectivamente de un formulario. Nos sirven para
controlar que el usuario no pueda cambiar el tamaño en que presentemos un
formulario en pantalla. Si sólo desactivamos una de las propiedades, el botón
correspondiente aparecerá desactivado, pero si desactivamos las dos
propiedades, no aparecerá ninguno de los 2 botones, únicamente lo hará el botón
con la "x" de cerrar.
ShowInTaskbar: Mediante esta propiedad
podremos controlar que determinado formulario aparezca o no en la barra
de tareas de Windows. En una aplicación con múltiples formularios, si
para cada uno de los que aparezca en pantalla, nos aparece también en la barra
de tareas, al final la barra estará llena de aplicaciones. Podemos hacer que
determinados formularios no aparezcan en ella colocando esta propiedad a
False.
Icon: Nos permite modificar el
icono que aparece a la izquierda de la barra del título de
cualquier formulario, que es donde aparece el menú de control, para personalizarlo en
nuestra aplicación
ControlBox: Controla la aparición del menú de control. Esta propiedad por defecto está activada, aunque si la ponemos a False, no sólo hacemos desaparecer el icono que simboliza al menú de control, sino que desaparecen también los botones de minimizar, maximizar y cerrar. Únicamente aparece la barra de titulo con el caption.
Si además de colocar ControlBox a False, colocamos MinButton y MaxButton a False y dejamos vacía la
propiedad Caption, es decir
sin nada en el título, nos aparecerá un formulario sin barra de titulo, es decir, únicamente un
rectángulo gris que sí podremos cambiar de tamaño apuntando sobre el borde.
BorderStyle: Esta propiedad es la que
más opciones tiene y la que más posibilidades ofrece para cambiar el aspecto de
nuestros formularios. El cambiar el valor de esta propiedad afecta también a
las propiedades MinButton, MaxButton y ShowInTaskbar
que cambian automáticamente según la opción que hayamos seleccionado. En la
siguiente tabla aparece una explicación de cada una de sus opciones y de que
valor adoptan otras propiedades del formulario:
Opciones de BorderStyle |
Utilidad |
MinButton |
MaxButton |
ShowInTaskbar |
Muestra |
0- None |
No aparecen bordes ni barra de titulo. No podemos modificar su tamaño de ninguna forma. Sirve para pantallas de presentación al principio de nuestra aplicación |
False |
False |
False |
|
1 - Fixed Single |
No se puede cambiar su tamaño.Ni siquiera se puede maximizar haciendo doble click sobre la barra del título, algo que sí se puede hacer desactivando los botones MinButton y MaxButton en un formulario normal |
False |
False |
True |
|
2 - Sizable (aparece por defecto) |
Formulario por defecto de VB.Contiene todos los botones de la barra del título, se puede cambiar su tamaño actuando sobre el borde y aparece en la barra de tareas. |
True |
True |
True |
|
3 - Fixed Dialog |
No se puede cambiar su tamaño y no aparece en la barra de tareas |
False |
False |
False |
|
4 - Fixed ToolWindow |
Aparece con la barra de titulo más pequeña, es el que utiliza VB para mostrar la caja de herramientas. No aparece el icono del menú de control ni aparece en la barra de tareas. |
False |
False |
False |
|
5 - Sizable ToolWindow |
Igual que el anterior pero sí permite modificar su tamaño actuando sobre el borde. |
False |
False |
False |
Para utilizar varios formularios en nuestra aplicación tendremos que
añadir cada uno de ellos mediante la opción de menú Insert / Form
o pulsando sobre el botón .
Método Show
Para llamar a un formulario desde el código utilizaremos el método Show. Si el formulario 2 tiene en la
propiedad Name form2, para llamarlo desde otro
formulario pondremos: Form2.Show
Si no ponemos ningún argumento se asume que el formulario aparece en
modo no modal, es decir, se permitirá que se active cualquier otro
formulario sin cerrar el formulario 2. La otra modalidad que existe es modal,
lo que significa que no se permite el enfoque hacia ningún otro formulario
hasta que no se cierre el actual. Este último modo puede servir para cuadros de
diálogo que soliciten ciertos parámetros para que la aplicación siga
funcionando: una contraseña.
Los argumentos del método Show son:
0 vbModeless No
modal
1 vbModal Modal
Ejemplo: Form2.Show
vbModal
Sentencia Load
La
sentencia Load seguida del nombre de un
formulario provoca que se cargue el formulario en memoria pero sin
visualizarse, ya que la propiedad Visible
se coloca a False.
Ejemplo: Load Form2
Realmente
el método Show realiza la carga del
formulario en memoria, si no estaba cargado antes, y coloca la propiedad Visible del formulario a True.
Durante este proceso se provoca la activación de los eventos Load y Activate del formulario en ese orden. En dichos eventos se puede colocar el código
necesario que haga que el formulario se inicie siempre con los valores que
queramos.
Si
el formulario ya estaba cargado en memoria, mediante una sentencia Load o porque se haya ocultado con el método Hide, al llamarlo con el método Show, únicamente se realizará la modificación de la
propiedad Visible a True,
y no se volverá a efectuar el proceso de carga del formulario a memoria. Por
tanto el formulario aparecerá con los mismos datos que tenía cuando se ocultó.
Ahora el único evento que se activará es el Activate que se activa cada vez
que un formulario recibe el enfoque o pasa a ser el formulario activo.
Sentencia Unload
Nos
permite descargar un formulario de la memoria. Se introduce junto al nombre del
formulario que vayamos a descargar: Unload Form2
Si
nos encontramos dentro del mismo formulario para descargarlo no hace falta
colocar el nombre sino únicamente: Unload me
En
una aplicación con varios formularios debemos usar esta sentencia para los
métodos que terminamos de utilizar, de esta forma liberaremos espacio en
memoria para que los otros formularios puedan aprovecharla mejor. La sentencia
unload provoca la activación de los eventos:
·
Deactivate: Al contrario que el evento Activate, éste
se activa cada vez que un formulario pierde el enfoque. También se activa este
evento al utilizar el método Hide.
·
Unload: Este evento recibe el parámetro Cancel, y
modificando su valor podemos hacer que se suspenda (cancele) el proceso de
descarga de un formulario. Mediante 2 líneas de código podemos hacer una pregunta
al usuario cada vez que se cierra un formulario para que nos confirme la
operación:
Este código provocará que
cada vez que se cierre el formulario de cualquier forma, (no sólo mediante la
sentencia Unload sino también haciendo
click sobre la "x", el menú
de control
o con ALT + F4) aparezca un mensaje
preguntándonos si realmente queremos salir:
· Query_Unload: Este evento se produce
realmente antes que el evento Unload.
En este evento además de recoger el parámetro Cancel, también
nos proporciona el parámetro UnloadMode que según el valor que tenga
podremos saber desde donde se produce la posible descarga del formulario. Los
valores que puede tener son los siguientes:
0 - vbFormControlMenu: Significa que el cierre
del formulario se ha producido:
· Pulsando sobre la
"x"
· Mediante la opción cerrar
del Menú de Control.
· Pulsando ALT + F4.
·
Cerrando el formulario desde la Barra de Tareas.
1 - vbFormCode: Indica que se ha cerrado
el formulario utilizando la sentencia Unload.
2 - vbAppWindows: Se cierra el formulario
porque se apaga el sistema desde Inicio / Apagar Sistema.
3 - vbAppTaskManager: Desde el administrador de tareas de windows (CTRL
+ ALT + DEL) se cierra la aplicación que contiene el formulario
4 - vbFormMDIForm: Se produce cuando se
cierra un formulario hijo porque se está cerrando el formulario MDI
que lo contiene.
Mediante unas líneas de código vamos a probar las posibilidades de este
evento. Según desde donde se cierre el formulario del que consta la aplicación
aparecerá un mensaje distinto pidiéndonos confirmación en el proceso de
descarga.
Nota: Para el correcto funcionamiento de este ejemplo se debe compilar la
aplicación mediante File / Make EXE File... y ejecutar la
aplicación desde fuera del entorno de trabajo de VB.Esto es así para que se
pueda cerrar la aplicación apagando el sistema y desde el administardor de tareas.
El código asociado al evento Query_Unload es el siguiente:
Desde
un formulario se puede tener acceso a los controles y propiedades de otro
formulario.
En
lugar de realizar el paso de parámetros cuando se llama a otro formulario que
queremos que aparezca con unos determinados valores iniciales, lo que se hace
es acceder a los controles del otro formulario y después mostrarlo mediante el
método Show.
Para
acceder a los controles de otro formulario se sigue la siguiente sintaxis:
Formulario!Control.Propiedad = valor
Se
debe colocar una admiración "!" entre el formulario
y el control y un punto entre el control y la propiedad. Ejemplo: Form2!Label1.Caption = "Número de Clientes"
Al
acceder a las propiedades de otro formulario automáticamente se carga éste en
memoria, si no lo estaba ya antes. Una vez que hayamos modificado sus
propiedades los visualizaremos con el método Show.
A V I S O : No se puede acceder a las
variables declaradas en otro formulario, de modo que si queremos trabajar con
variables generales, las cuales sean accesibles desde cualquier formulario de
la aplicación, tendremos que declararlas como Públicas desde un módulo de código.
Para insertar un módulo en nuestro proyecto tendremos que ejecutar el
menú ”Proyecto/Agregar Módulo” o pulsar sobre el botón de la barra de herramientas. Nos aparecerá una ventana en la que únicamente
podremos colocar las variables y procedimientos o funciones que queramos que
sean públicas para toda la aplicación.
Ahora la ventana de proyecto tiene una línea más con un
icono distinto indicando que se trata de un módulo de código:
A
continuación se detalla una lista con las constantes más usadas definidas en
Visual Basic y su significado:
vbBlack color negro
vbBlue color azul
vbCyan color azul celeste
vbGreen color verde
vbMagenta color violeta
vbRed color rojo
vbWhite color blanco
vbYellow color amarillo
vbYes Si
vbNo No
vbCrLf Introduce un retorno de carro y
un avance de línea. De esta forma podemos hacer que se comience a escribir en
una nueva línea.
Las
siguientes constantes se utilizan en los MsgBox para indicar la señal y los
botones que se mostrarán:
vbCritical señal de error
vbExclamation señal de advertencia
vbInformation señal de información
vbQuestion señal de interrogación
vbOkOnly botón de aceptar
vbOkCancel botones aceptar y cancelar
vbYesNo botones Sí y No
vbYesNoCancel botones Sí, No y Cancelar
vbAbortRetryIgnore botones Anular, Reintentar y Omitir
Para
determinar que carácter se ha pulsado en el teclado podemos comprobar su código
ASCII. Visual Basic nos facilita esta labor mediante estas constantes:
vbKeyUp flecha arriba
vbKeyDown flecha abajo
vbKeyLeft flecha izquierda
vbKeyRight flecha derecha
vbKeyReturn tecla
Intro
vbKeyEscape tecla
Escape
vbKeySpace tecla espacio
vbLeftButton botón izquierdo del ratón
vbRightButton botón derecho del ratón
Evidentemente hay muchas
más, aunque no las expondremos aquí. Los cuatro primeros casos propuestos nos
servirán para, por ejemplo, mover un objeto por la pantalla con la ayuda de las
teclas de desplazamiento, como sucede en un juego.
Funciones
Una función nos servirá para
realizar un cálculo u obtener un determinado valor. Entre las múltiples
existentes podemos destacar las siguientes, agrupadas en categorías.
Abs(número) Devuelve el
valor absoluto de número
Sgn(número) Indica el
signo de número
Int(número) Devuelve
la parte entera de número
Sqr(número) Halla la
raíz cuadrada de número
Round(número, numdecimales) Redondea número con las posiciones decimales indicadas
Sin(ángulo) Seno de ángulo
Cos(ángulo) Coseno de ángulo
Tan(ángulo) Tangente
de ángulo
Rnd Devuelve un número aleatorio
entre 0 y 1
Randomize Inicializa el generador aleatorio
Left(cadena, num) Extrae num caracteres de cadena contando de izquierda a derecha
Right(cadena, num) Extrae num caracteres de cadena contando de derecha a izquierda
Mid(cadena, pos, num) Extrae
num caracteres de cadena a partir de la posición pos
Len(cadena) Devuelve la longitud
de la cadena
LCase(cadena) Convierte la cadena a
minúsculas
UCase(cadena) Convierte la cadena a
mayúsculas
Date Devuelve la fecha actual
Time Devuelve la hora actual
Now Devuelve la fecha y hora
actuales
Day(Date) Devuelve el día del mes
WeekDay(Date) Devuelve el día de la semana en que nos
encontramos, como número y teniendo en cuenta que el 1 es el Domingo, 2 lunes,
...
Month(Date) Devuelve el mes en que estamos, como número
Year(Date) Devuelve el año
MonthName(num) Devuelve el nombre del mes que
representa num.
WeekdayName(num) Devuelve el día de la semana que
representa num. Recordar que el 1 es el domingo, 2 lunes, ...
Hour(Time) Devuelve la hora
Minute(Time) Devuelve los minutos
Second(Time) Devuelve los segundos
IsNumeric(dato) Comprueba si un dato es
numérico
IsDate(dato) Comprueba si un
dato es de tipo fecha u hora
Asc(carácter) Devuelve el
código ASCII del carácter indicado
Chr(códigoASCII) Devuelve el carácter
correspondiente al código ASCII indicado
Beep Emite un pitido
Print Imprime en pantalla el
resultado de la expresión o valor que aparece a su derecha. Por defecto, la
impresión tendrá lugar en el formulario. Si deseamos imprimir por ejemplo
dentro de un PictureBox, tendremos que anteponer el nombre de éste antes de la
instrucción Print, separados por un punto.
Si queremos escribir
varios datos en una misma línea, podemos utilizar los siguientes separadores
entre unos y otros:
Separador |
Resultado |
|
,
(coma) |
los datos quedan separados por un tabulador |
|
;
(punto y coma) |
los datos quedan separados por un único espacio
en blanco |
|
& (andpersand) |
los datos se escriben unos junto a otros, sin
separación |
|
Ejemplos |
Resultado en
pantalla |
|
Print
22, “hola” |
22 hola |
|
Print
22; “hola” |
22 hola |
|
Print
22 & “hola” |
22hola |
|
La
función InputBox se utilizará cuando queramos que el usuario introduzca
algún dato. Esta función presenta la siguiente sintaxis:
variable = InputBox (“mensaje”, [“titulo”], [“valor por defecto”])
donde variable es una
variable de tipo String en la que se almacenará el dato introducido por el
usuario, y mensaje es el mensaje que se mostrará en la ventana de entrada de
datos. Los valores que aparecen entre corchetes es porque su inclusión en la
función InputBox es opcional, por lo que pueden omitirse. Título representa el texto que
aparecerá como cabecera en la ventana, y Valor por defecto es el valor que tomará la
variable si el usuario no introduce ningún valor en la casilla correspondiente.
El siguiente ejemplo
nombre
= InputBox (“escriba su
nombre”,”AVISO”)
mostraría la ventana de
entrada de datos de la figura, y almacenaría el valor introducido por el
usuario en la variable nombre (que debe ser de tipo String).
La función MsgBox
permite mostrar un mensaje. La sintaxis de esta función es como en el siguiente
ejemplo:
MsgBox
“No se puede calcular el factorial de un número negativo”, _ vbCritical +
vbOKOnly, “Error”
El resultado del ejemplo anterior sería una ventana como la que aparece
a continuación. Como
puede verse la función MsgBox lleva tres argumentos separados por comas; el
primero de ellos es el cuerpo del mensaje, en el segundo se hace referencia
tanto al dibujo que se mostrará como al botón o botones que aparecerán y en el
último se indica el título de la ventana en la que aparece el mensaje.
La función MsgBox nos permite conocer que botón ha pulsado el usuario
como respuesta al mensaje. Por ejemplo, una función MsgBox en la que
aparecieran un botón SI junto a un botón NO (vbYesNo), tendría el valor vbYes
si pulsamos el botón SI o el valor vbNo si el botón pulsado es NO. Veámoslo más
claramente en el siguiente ejemplo
If MsgBox
("¿Realmente desea salir?", vbYesNo + vbExclamation, _
"ATENCION") = vbYes Then End
Esta línea de código hace que aparezca una ventana preguntándonos si
deseamos salir del programa, en la que aparecerán los botones <Si> o
<No>. Si pulsamos el botón <Si>, el programa finalizará (comando
End).
Nota importante: conviene resaltar aquí que cuando una sentencia de Visual Basic es
demasiado larga y no cabe en una línea, antes de comenzar a escribir la
continuación de dicha sentencia en la línea inferior es necesario escribir el
carácter de subrayado ( _ ) al finalizar la línea anterior
como puede observarse en el último ejemplo.
Las distintas combinaciones de dibujos y botones que pueden mostrarse
en un MsgBox se encuentran en el apartado 6.1. , aunque los repetiremos
aquí:
vbCritical señal de error
vbExclamation señal de advertencia
vbInformation señal de información
vbQuestion señal de interrogación
vbOkOnly botón de aceptar
vbOkCancel botones aceptar y cancelar
vbYesNo botones Sí y No
vbYesNoCancel botones Sí, No y Cancelar
vbAbortRetryIgnore botones Anular, Reintentar y Omitir
Cuando queramos añadir a nuestros programas una
barra de menús, la tarea será sencilla utilizando el editor de menús. Para
activar el editor de menús debemos ir al menú Herramientas de Visual
Basic y allí escoger la opción Editor de menús…, o bien hacer clic sobre
el botón correspondiente de la barra de
herramientas Estandar. Aparecerá una ventana como la siguiente:
Caption: será el texto que aparecerá
en el menú. Si se desea que alguna de las letras del menú sirva para acceder de
forma rápida a dicho menú, se debe situar el carácter & antes de esa letra.
Como se puede observar en cualquier programa Windows esto hará que ese carácter
del menú aparezca subrayado. (Este mismo carácter & puede utilizarse de
modo análogo en el caption de un CommandButton. Si pulsamos la combinación de
teclas ‘ALT+ el carácter escogido’ será como hacer click con el ratón en dicho
botón) Para incluir un separador entre distintas opciones del menú, esta
propiedad debe ser – (un guión).
Name: es el nombre con el que
nos referiremos al menú desde el código.
Shortcut: asocia una combinación de
teclas para acceder al menú de forma abreviada.
Checked: determina si aparecerá o
no una marca de verificación a la izquierda de la opción del menú.
Enabled: si esta casilla no está
marcada, dicho menú no será accesible apareciendo difuminado.
Visible: determina si dicho
elemento del menú podrá verse o no.
Estas tres últimas propiedades pueden modificarse
en tiempo de ejecución estableciendo su valor a True o a False.
Cuando queramos que un menú esté dentro de otro, es
decir, sea un submenú, no tendremos más que tabularlo en el editor de menús
mediante el botón del mismo.
El único evento disponible para un menú es Click ,
que corresponde a la selección de la opción, independientemente de que ésta se
realice con el ratón o con el teclado.
Para crear un menú emergente o menú contextual no
tememos más que crearlo como si se tratase de un menú normal y hacerlo
invisible. Para abrirlo haremos uso del método PopupMenu, como se muestra en el
siguiente ejemplo.
If Button = vbRightButton Then PopupMenu nombremenú